package model.repositorio;

import java.util.List;

import javax.persistence.Query;

import model.entidades.Convenio;
import model.repositorio.util.ConexaoBD;
import utils.Constantes;


public class ConvenioDAO extends GenericDAOImpl<Convenio>{
	
	public static String SITUACAO_ATIVOS = Constantes.ATIVO;
	public static String SITUACAO_INATIVOS = Constantes.INATIVO;
	public static String SITUACAO_TODOS = "TODAS";
	
	public ConvenioDAO(){
		setEntityManager( ConexaoBD.getEntityManager() );
	}

	public Convenio buscaPorCNPJ(String cnpj) {
		String hql = "select p from Convenio p where p.cnpj = :cnpj";
		Query consulta = getEntityManager().createQuery(hql);
		consulta.setParameter("cnpj", cnpj);
		@SuppressWarnings("unchecked")
		List<Convenio> resultado = consulta.getResultList();
		if (resultado != null && resultado.size() > 0) {
			return resultado.get(0);
		} else {
			return null;
		}
	}

	public Convenio buscaPorNomeExibicao(String nomeExibicao) {
		String hql = "select p from Convenio p where p.nomeExibicao = :nomeExibicao";
		Query consulta = getEntityManager().createQuery(hql);
		consulta.setParameter("nomeExibicao", nomeExibicao);
		@SuppressWarnings("unchecked")
		List<Convenio> resultado = consulta.getResultList();
		if (resultado != null && resultado.size() > 0) {
			return resultado.get(0);
		} else {
			return null;
		}
	}

	/**
	 * Retorna todos os convenios da situacao passada exceto o convenio PARTICULAR
	 * @param situacao
	 * @return
	 */
	public List<Convenio> buscaPorParametros(String situacao) {

		String hql = "";
		Query consulta = null;
		if (situacao.equalsIgnoreCase(SITUACAO_TODOS)) {
			hql = "select p from Convenio p where p.nomeExibicao <> 'PARTICULAR'";
			consulta = getEntityManager().createQuery(hql);
		} else {
			hql = "select p from Convenio p where (p.situacao = :situacao and p.nomeExibicao <> 'PARTICULAR')";
			consulta = getEntityManager().createQuery(hql);
			consulta.setParameter("situacao", situacao);
		}

		@SuppressWarnings("unchecked")
		List<Convenio> resultado = consulta.getResultList();
		if (resultado != null && resultado.size() > 0) {
			return resultado;
		} else {
			return null;
		}

	}
	
}
